
#ifndef CHECK_H
#define CHECK_H

#include "TableSym.h"


int checkAllFct(FCTSYM symTRec, FCTSYM root);
/*
    a. Objects utilisés:
        i. FCTSYM symTRec : la fonction courante à vérifier.
        ii. FCTSYM root : la table des symboles (la racine).
    b. Pré-conditions : la table des symboles existe.
    c. Post-conditions : les fonctions ont toutes été vérifiées.
    d. Description : vérifie le code lsd11 donné en entrée.
*/

int  getNbArgCallFct(TREE tree);
/*
    a. Objects utilisés:
        i. TREE tree : un noeud de l'arbre de type AT_LISTCALLARG.
    b. Pré-conditions : /.
    c. Post-conditions : le nombre d'arguments de la fonction est retourné.
    d. Description : récupère le nombre d'arguments de la fonction.
*/
 
int compareTypeArgs(VARSYM argFct, TREE argCallFct, FCTSYM symT, int nbArg);
/*
    a. Objects utilisés: 
        i. VARSYM argFct : l'argument de la fonction appelée en cours de comparaison.
        ii. TREE argCallFct : le noeud de l'arbre correspondant à l'argument dans l'appel de fonction.
        iii. FCTSYM symT : la fonction en cours de vérification.
        iv. int nbArg : le nombre d'argument donné lors de l'appel de la fonction.
    b. Pré-conditions : la fonction existe.
    c. Post-conditions : les types des arguments ont été vérifiés.
    d. Description : vérifie si les types des arguments donnés lors de l'appel de fonction correspondent aux types des arguments de la fonction appelée.
*/

extern FCTSYM findFctOfCallFct(FCTSYM symT, char* name);
/*
    a. Objects utilisés:
        i. FCTSYM symT : la fonction courante (dans laquelle se trouve l'appel de fonction).
        ii. Char* name : le nome de la fonction appelée.
    b. Pré-conditions : /.
    c. Post-conditions : la fonction appelée a été trouvée ou non.
    d. Description : recherche la fonction appelée.
*/

extern int checkFct(TREE tree, FCTSYM symT, FCTSYM root);
/*
    a. Objects utilisés:
        i. TREE tree : le noeud de l'arbre correspondant à la fonction à vérifier
        ii. FCTSYM symT : la fonction en cours de vérification.
        iii. FCTSYM root : la table des symboles (la racine).
    b. Pré-conditions : l'arbre et la table des symboles existent.
    c. Post-conditions : le code de la fonction a été vérifié.
    d. Description : vérifie le code d'une fonction.
*/

extern int checkCallFct(TREE callFct, FCTSYM symT);
/*
    a. Objects utilisés:
        i. TREE callFct : un noeud de l'arbre de type AT_CALLFCT
        ii. FCTSYM symT : fonction effectue l'appel.
    b. Pré-conditions : la fonction appelante fait partie de la table des symboles.
    c. Post-conditions : le code de l'appel de fonction a été vérifié.
    d. Description : vérifie le code d'un appel de fonction.
*/

char * getType (TREE tree, FCTSYM symT);
/*
    a. Objects utilisés:
        i. TREE tree : le noeud correspondant à la fonction dont les opérations sont en cours de vérification.
        ii. FCTSYM symT : la fonction qui contient les opérations en cours de vérification.
    b. Pré-conditions : l'arbre existe et la fonction fait partie de la table des symboles.
    c. Post-conditions : retourne le type de la variable, de la constante, du résultat de l'opération ou WRONG si le type est incorrect.
    d. Description : pour différentes opérations (affectation, somme, différence, ou logique,...), vérifie si les variables utilisées existent et sont du type correct.
*/


#endif
